require 'sketchup.rb'
require File.join(__FILE__, '../amtf_mixin.rb')
module AMTF
  class AF另存排版
    include AMTF_mixin
    def 另存为排版模型
      Sketchup::set_status_text __method__.to_s()+" ing"
      设置常用对象
      file=@model.path
      # p @model.path
      路径 = File.dirname(file).freeze
      文件名 = File.basename(file, '.*')
      today = Time.new;
      时间后缀= today.strftime("%Y%m%d_%H%M%S");
      另存文件名=文件名
      if 另存文件名.include? '_排版'
        另存文件名=另存文件名.gsub!(/_排版\S*/, "")
      end
      另存文件名=另存文件名+'_排版'+时间后缀
      另存全名=路径+'/'+另存文件名+'.skp'
      status = @model.save(另存全名)
      Sketchup::set_status_text __method__.to_s()+另存全名+" 完成！"
    end
    def 删除指定图层
      Sketchup::set_status_text __method__.to_s()+" ing"
      设置常用对象
      层s=@model.layers
      拟删除层=[]
      拟删除层名称=[]
      p 层s.size
      层s.each {|e|
        p e
        if e.name=~ /afu-参考|afu-五金|afu-尺寸标注|afu-开向|afu-拉手|afu-明装拉手/
        # if e.name=~ /五金/
          # 层s.remove(e,true)
          拟删除层.push e
          拟删除层名称.push e.name
        end
      }
      拟删除层.each {|e|
          层s.remove(e,true)
      }
      提示信息="已删除图层："+拟删除层名称.to_s
      Sketchup::set_status_text 提示信息
    end

    def 删除隐藏项目()
      设置常用对象
      @entities.each {|e|
        删除隐藏项目主体(e)
      }
    end
    def 删除隐藏项目主体(e)
      if e.hidden?
        begin
          提示名= e.name
        rescue Exception => e
          p e
          提示名= e.to_s
        end
        if 提示名==""
          提示名=e.definition.name
        end
        if 提示名==""
          提示名=e.to_s
        end
        提示信息="删除:"+提示名
        p 提示信息
        p "删除隐藏组件内存名:"+e.to_s
        发送提示信息(提示信息)
        begin
          e.erase!
        rescue Exception => e
          p e
        end
      else
        if ( e.is_a?( Sketchup::ComponentInstance ) || e.is_a?( Sketchup::Group ))
          e.definition.entities.each{|ee|
            删除隐藏项目主体(ee)
          }
        end
      end
    end

    def 删除or炸开无板字组件()
      设置常用对象
      @entities.each {|e|
        删除or炸开无板字组件主体(e)
      }
      发送提示信息("方法完成")
    end

    def 删除or炸开无板字组件主体(e)
      if e.is_a? Sketchup::ComponentInstance or e.is_a? Sketchup::Group
        @炸开了组件=false
        组件定义名=e.definition.name
        组件实例名=e.name
        组件加实例名=组件定义名+"+"+组件实例名
        关键词位置= 组件加实例名=~ /铰链|智能|参数|侧封板/
        if 组件加实例名.include? '板' and 关键词位置==nil
          # 不干啥
        else
          if !含子组件?(e)
            提示信息="删除:"+组件加实例名
            p 提示信息
            发送提示信息(提示信息)
            e.erase!
          else
            提示信息="炸开:"+组件加实例名
            p 提示信息
            发送提示信息(提示信息)
            e.explode
            删除or炸开无板字组件
          end
        end
      end
    end

    def 炸开所有子组件
      设置常用对象
      @层级h=Hash[]
      ents=[]
      if @selection.count > 0
        @selection.each {|e|
          if ( e.is_a?( Sketchup::ComponentInstance ) || e.is_a?( Sketchup::Group ))
            ents.push e
          end
        }
      end
      p ents.count == 0
      ents=@entities if ents.count == 0
      ents.each {|e|
        if ( e.is_a?( Sketchup::ComponentInstance ) || e.is_a?( Sketchup::Group ))
          当前层级=0
          炸开所有子组件主体(e,当前层级)
        end
      }
      发送提示信息("方法完成")
    end

    def 组件改名
      设置常用对象
      ents=@entities
      提示信息a=[]
      ents.each {|e|
        if ( e.is_a?( Sketchup::ComponentInstance ) || e.is_a?( Sketchup::Group ))
          组件名=e.definition.name
          组件名= 组件名.gsub!(/\S*通用|智能|参数/, "")
          if 组件名!=nil
            e.definition.name=组件名
            提示信息a.push 组件名
          end
        end
      }
      发送提示信息("方法完成")
    end

    def 组件转群组
      设置常用对象
      ents=@entities
      提示信息a=[]
      ents.each {|e|
        if e.is_a?( Sketchup::ComponentInstance )
          组件名=e.definition.name
          p 组件名
          begin
            eee=e.explode
            # p eee
            # group = @entities.add_group()
            # group.name=组件名
            # entities2 = group.entities
            # entities2.add_face(*eee)
            fs=[]
            eee.each {|e|
              if e.is_a?( Sketchup::Face )
                fs.push e
              end
            }
            # entities2.add_face(fs)
            group = @entities.add_group(fs)
            group.name=组件名
          rescue Exception => e
            p e
          end


        end
      }
      发送提示信息("方法完成")
    end

    def 一键排版预处理
      另存为排版模型
      删除指定图层
      删除隐藏项目

      清除未使用

      删除or炸开无板字组件
      炸开所有子组件
      组件改名
      组件转群组
      清除未使用
      发送提示信息("方法完成")
    end

    def 延伸背板(延伸值)
      设置常用对象
      if @selection.count == 0
        UI.messagebox "请选择一个背板"
      end
      @selection.each {|e|
        if e.is_a?( Sketchup::Group )
          群组=e
        elsif e.is_a?( Sketchup::Face )
          群组=e.parent
        end
        延伸背板主体(群组,延伸值)
      }
      发送提示信息("方法完成")
    end

    def 延伸背板主体(群组,延伸值)
      名称=群组.name
      p 名称
      entities = 群组.entities
      面h=Hash[]
      entities.each {|ee|
        if ee.is_a?( Sketchup::Face )
          面=ee
          面积=面.area
          面h[面]=面积
        end
      }

      延伸值=延伸值.to_f
      延伸值=延伸值.mm
      面h= Hash[面h.sort_by {|key,value| value}]
      i=0
      (0..3).each { |i|
        面=面h.keys[i]
        status = 面.pushpull(延伸值)
      }
    end

    def 删除多余元素(entities,拟删除元素)
      for e in entities.to_a
        if !(e.is_a?( Sketchup::Face ) || e.is_a?( Sketchup::ComponentInstance ) || e.is_a?( Sketchup::Group ))
          if e.is_a?( Sketchup::Edge )
            faces = e.faces
            # p faces.size
            if faces.size<1
                # e.erase!
                拟删除元素.concat(拟删除元素)
            end
          else
            # e.erase!
            拟删除元素.concat(拟删除元素)
          end
        end
      end
    end
  end#class

end # module amtf_su
